from flask import Blueprint, jsonify
from application.models.users.user import User
from util.captcha.captcha import captcha
user_blue = Blueprint("userblue",__name__)
from flask import request,make_response,abort
from util.myredis import r
import json
import time
from db import db
from util.myjwt import myjwt
import redis
import random
from util.comm import sendMsg
# 获取图片验证码
@user_blue.route("/getcode")
def getcode():
    # 生成图片验证码 text文字，image图片流
    name,text,image = captcha.generate_captcha()
    # 从页面获取uuid做为redis key
    uuid = request.args.get('uuid')
    # 存入redis
    r.str_add(uuid,60,text)
    # 以流的方式生成图片验证码
    res = make_response(image)
    res.headers['Content-Type']='image/hpg'
    return res
# 短信验证码
@user_blue.route("/send",methods=['POST'])
def send():
    data = json.loads(request.data)
    if data:
        data = json.loads(data)
        # 获取3个参数
        uuid = data['uuid']
        piccode = data['piccode']
        mobile = data['mobile']
        # 通过uuid查询redis
        value = r.str_add(uuid)
        if value:
            # 两个验证码对比，如果成功调用短信平台发短信
            if piccode.lower() == value.lower():
                # 验证码1分钟内只能发一次
                mcode = r.str_get(mobile)
                if mcode:
                    return jsonify({'code':10011,'msg':'一分钟内不能重复发'})
                # 生成5位随机数
                scode = random.randint(10000,99999)
                print(scode)
                # 调用短信平台
                flag = sendMsg(mobile,scode)
                if flag == True:
                    # 存入redis
                    r.str_add(mobile,scode,60)
                    # s删除图形验证码
                    r.del_str(uuid)
                    # 返回结果
                    return jsonify({'code':200,'msg':'发送成功'})
                else:
                    return jsonify({'code':10012,'msg':'发送验证码失败'})
            else:
                return jsonify({'code':10013,'msg':'图形验证码错误'})
            # 失败返回错误信息
        else:
            return jsonify({'code':10014,'msg':'图片验证码不存在'})

@user_blue.route("/login",methods=['POST'])
def login():
    # 获取手机号、验证码参数
    data=request.data
    if data:
        data=json.loads(data)
        # 获取两个参数
        mcode=data['code']
        mobile=data['mobile']
        # 根据手机号去redis中获取验证码
        code=r.str_get(mobile)
        if code:
            if int(mcode)==int(code):
                # 如果相同查询数据库user表
                u = User.query.filter_by(mobile=mobile).first()
                print("uuuu",u)
                if u:
                    r.del_key(mobile)
                    # return jsonify({"code":402,"msg":"该用户已存在"})

                else:
                    u = User(mobile=mobile,nikename=mobile)
                    db.session.add(u)
                    db.session.commit()
                data = {'data': {'userid': u['id']}}
                token = myjwt.jwt_encode(data)
                return jsonify({"code":200,"token":token,"userid":u.id})
            else:
                return jsonify({"code":10044,"msg":"验证码错误"})
        else:
            return jsonify({"code":1004,"msg":"没有获取到参数"})
